/**
 * 学习目标：React组件通讯 - 数据子传父 this.props
 *  注意点：
 *    1. 可以给组件传递任意类型的数据，包括虚拟DOM结构(比Vue更灵活)
 *    2. props是只读的，不允许修改props的数据(Vue的props也是只读的)
 */
import React from 'react'
import ReactDOM from 'react-dom'

class Child extends React.Component {
  // 孩子
  state = {
    msg: '天凉了，注意身体。',
  }

  render() {
    return (
      <div>
        <h3>子组件</h3>
        <h4>访问家里的存款：{this.props.money}</h4>
        <button onClick={() => this.props.aa(1000)}>孩子要花钱啦</button>
        <hr />
        <button onClick={() => this.props.bb(this.state.msg)}>孩子发消息给父母</button>
      </div>
    )
  }
}

class App extends React.Component {
  state = {
    money: 50000,
  }

  // 父组件负责消费的方法
  handleUseMoney = (value) => {
    this.setState({ money: this.state.money - value })
  }

  handleGetChildMsg = (msg) => {
    console.log('父组件接收孩子的信息', msg)
  }

  render() {
    return (
      <>
        <h1>React组件通讯</h1>
        <h2>家里存款：{this.state.money}</h2>
        <button onClick={() => this.setState({ money: this.state.money + 10000 })}>老爸打工赚钱</button>
        <button onClick={() => this.handleUseMoney(100)}>老妈消费家里的钱</button>
        {/* 🔔 props可以传递任意类型数据，包括函数(方法) */}
        <Child money={this.state.money} aa={this.handleUseMoney} bb={this.handleGetChildMsg} />
      </>
    )
  }
}

// 渲染组件
ReactDOM.render(<App />, document.getElementById('root'))
